home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib06.dsk / APPLE FINANCIER - PART IV.bas < prev    next >
BASIC Source File  |  2023-02-26  |  17KB  |  333 lines

  1. 100  REM  *****************************
  2. 101  REM  *   APPLE FINANCIER - IV    *
  3. 102  REM  *    BY LARRY ABRAMS        *
  4. 103  REM  *   COPYRIGHT (C) 1981      *
  5. 104  REM  *   BY MICRO-SPARC INC      *
  6. 105  REM  *   LINCOLN, MA. 01773      *
  7. 106  REM  *  (MODS 900, 5000 NEW)     *
  8. 107  REM  *****************************
  9. 110 :
  10. 200  REM  MENU
  11. 201  ONERR  GOTO 500
  12. 202  HOME : VTAB 2: HTAB 12: INVERSE : PRINT " SELECT ONE OF THE FOLLOWING ": NORMAL : GOSUB 400
  13. 204 G$ =  CHR$(7)
  14. 210  PRINT  TAB( 9)"STRAIGHT LINE DEPRECIATION  <1>"
  15. 220  PRINT  TAB( 3)"VAR RATE - DECL BAL DEPRECIATION  <2>"
  16. 230  PRINT  TAB( 12);"ACCRUED SIMPLE INTEREST  <3>"
  17. 240  PRINT  TAB( 18);"COMPOUND INTEREST  <4>"
  18. 250  PRINT  TAB( 10);"UNEARNED INTEREST REBATES  <5>"
  19. 280  PRINT  TAB( 14)"DIRECT REDUCTION LOAN  <8>"
  20. 290  PRINT  TAB( 14);"AMORTIZATION SCHEDULE  <9>"
  21. 292  GOSUB 400: PRINT  TAB( 24);"<RETURN> TO QUIT":VT =  PEEK(37) +2
  22. 293 HT = 30: VTAB VT: HTAB HT: CALL  -868: PRINT "WHICH":HT = 38:LS = 1: GOSUB 902:ANS =  VAL(CS$): IF  LEN(CS$) = 0  THEN  END 
  23. 295  IF  STR$(ANS) < >CS$  OR ANS = 0  THEN  PRINT G$;: GOTO 293
  24. 296  ON ANS GOTO 1000,2000,3000,4000,5000,6000,7000,8000,9000
  25. 298 :
  26. 300  REM  PRINT USING
  27. 302 P$ =  STR$( INT((P +.005) *100))
  28. 304  IF  LEN(P$) <3  THEN P$ =  LEFT$("000",(3 - LEN(P$))) +P$
  29. 305 PP$ =  LEFT$(P$,( LEN(P$) -2))
  30. 306  IF DP = 0  THEN P$ = PP$: GOTO 308
  31. 307 P$ = PP$ +"." + RIGHT$(P$,DP)
  32. 308 P$ =  RIGHT$("          " +P$,PL)
  33. 310  RETURN 
  34. 312 :
  35. 400  FOR DOT = 0 TO 39: PRINT ".";: NEXT DOT: RETURN 
  36. 402 :
  37. 500  REM  ERROR HANDLING ROUTINE
  38. 502  HOME : VTAB 5: INVERSE : PRINT "CHECK APPLESOFT MANUAL PG 136 FOR ERR": NORMAL 
  39. 504  PRINT : PRINT "ERROR IS NUMBER "; PEEK(222): PRINT "LOCATED IN LINE "; PEEK(218) + PEEK(219) *256: POKE 34,0: END 
  40. 505 :
  41. 600  REM  DAYS BETWEEN DATES
  42. 602  HOME : VTAB 5:A(4) = 0: PRINT "BEGINNING DATE  ";: GOSUB 606:A(4) = ND: PRINT 
  43. 604  PRINT "   ENDING DATE  ";: GOSUB 606:A(4) = ND -A(4): RETURN 
  44. 606  PRINT  CHR$(91);"YY"; CHR$(93);"YY.MMDD: ";: INPUT "";DTE
  45. 608 YRS =  INT(DTE):MOS =  INT((DTE -YRS) *100):DAYS =  INT((DTE -YRS -MOS/100) *1E4 +.5)
  46. 610 YRS = YRS -1900 *(YRS >99)
  47. 612  REM  ACTUAL DAYS (365)
  48. 613 YY = YRS -(MOS < = 2)
  49. 614 LD =  INT(.4 *MOS +2.3) *(MOS >2)
  50. 616 ND = 365 *YRS +31 *(MOS -1) +DAYS + INT(YY/4) -LD: RETURN 
  51. 618 :
  52. 620  REM  BANKING YEAR (360)
  53. 622 LD = DAYS
  54. 624  IF DAYS < >31  THEN 630
  55. 626  IF A(4) >0  AND PDAYS <30  THEN 630
  56. 628 LD = 30
  57. 630 ND = 360 *YRS +30 *MOS +LD:PDAYS = DAYS: RETURN 
  58. 900  REM  DATA INPUT
  59. 901  FOR I = 0 TO LS:NS$(I) = " ": NEXT I:CS$ = ""
  60. 902  FOR I = 0 TO LS
  61. 904  VTAB VT: HTAB HT +I: GET NS$: IF NS$ =  CHR$(13)  THEN NS$(I) = "": GOTO 930
  62. 906  IF NS$ =  CHR$(8)  OR NS$ =  CHR$(21)  THEN 910
  63. 908  IF NS$ =  CHR$(44)  OR NS$ =  CHR$(58)  OR  ASC(NS$) <32  THEN  PRINT G$;: GOTO 904
  64. 910  IF NS$ =  CHR$(8)  AND I = 0  THEN 904
  65. 912  IF NS$ =  CHR$(8)  THEN I = I -1: GOTO 904
  66. 913  IF NS$ =  CHR$(21)  AND I <LS  THEN I = I +1: GOTO 904
  67. 914  IF I = LS  AND NS$ < > CHR$(13)  THEN  PRINT G$;: GOTO 904
  68. 916 NS$(I) = NS$: VTAB VT: HTAB HT +I:: PRINT NS$(I): NEXT I
  69. 930 AL = I:I = LS: NEXT I:CS$ = ""
  70. 932  FOR I = 0 TO AL -1:CS$ = CS$ +NS$(I): NEXT I
  71. 934  IF CS$ =  CHR$(13)  OR CS$ = ""  THEN  VTAB VT: HTAB HT: PRINT  SPC( LS): GOTO 938
  72. 936  VTAB VT: HTAB HT: PRINT CS$; SPC( LS - LEN(CS$))
  73. 938  PRINT : RETURN 
  74. 940 :
  75. 1000  REM  STRAIGHT LINE DEPRECIATION
  76. 1002 :
  77. 1004  REM  PROGRAM INSTRUCTIONS
  78. 1006  CLEAR :DP = 0:G$ =  CHR$(7): HOME : VTAB 10
  79. 1008  PRINT "INSTRUCTIONS? ";: POKE  -16368,0: GET ANS$: IF  LEFT$(ANS$,1) < >"Y"  THEN  HOME : VTAB 10: GOTO 1102
  80. 1010  HOME : VTAB 5: PRINT "  STRAIGHT LINE DEPRECIATION SCHEDULE": GOSUB 400
  81. 1012  PRINT "THE ANNUAL DEPRECIATION ALLOWANCE USING"
  82. 1014  PRINT "THIS METHOD IS DETERMINED BY DIVIDING"
  83. 1016  PRINT "THE COST (STARTING BOOK VALUE) LESS ITS"
  84. 1018  PRINT "ESTIMATED SALVAGE VALUE BY ITS USEFUL"
  85. 1020  PRINT "LIFE EXPECTANCY.  THAT IS:": PRINT 
  86. 1022  INVERSE : PRINT " DEPRECIATION ";: NORMAL : PRINT "=": PRINT 
  87. 1024  PRINT "(START BK VAL - SALVAGE VAL) / (LIFE)": PRINT 
  88. 1026 :
  89. 1100  REM  INPUT STARTING,SALVAGE,LIFE
  90. 1102  PRINT "1. STARTING BOOK VALUE ";: IF FLAG  THEN  PRINT A(1): GOTO 1106
  91. 1104  INPUT A(1)
  92. 1106  PRINT "2. SALVAGE VALUE"; TAB( 24);: IF FLAG  THEN  PRINT A(2): GOTO 1110
  93. 1108  INPUT A(2)
  94. 1110  PRINT "3. LIFE EXPECTANCY"; TAB( 24);: IF FLAG  THEN  PRINT A(3): GOTO 1114
  95. 1112  INPUT A(3):FLAG = 1
  96. 1114  PRINT : PRINT "ANY CHANGES? ";: POKE  -16368,0: GET ANS$: PRINT ANS$: IF  LEFT$(ANS$,1) = "N"  THEN 1118
  97. 1116  PRINT : INPUT "WHICH ONE? ";W: PRINT "CHANGE PART ";W;" TO: ";: INPUT A(W): HOME : VTAB 10: GOTO 1102
  98. 1118 BKVLUE = A(1):SALVAGE = A(2):LFE = A(3)
  99. 1120  PRINT : PRINT "DISPLAY ENTIRE SCHEDULE? ";: POKE  -16368,0: GET ANS$: PRINT ANS$
  100. 1122  IF  LEFT$(ANS$,1) = "Y"  THEN I = 0: GOTO 1202
  101. 1124  PRINT "WHICH YEARS (START,END)";: INPUT I,J
  102. 1126 :
  103. 1200  REM  OUTPUT HEADINGS
  104. 1202  HOME : PRINT  TAB( 5);"DEPR"; TAB( 14);"REMAIN"; TAB( 25);"REMAIN"; TAB( 35);"TOTAL"
  105. 1204  PRINT "YR"; TAB( 4);"AMOUNT"; TAB( 12);"DEPR VALUE"; TAB( 23);"BOOK VALUE"; TAB( 35);"DEPREC";
  106. 1206  GOSUB 400: POKE 34,3
  107. 1208 :
  108. 1300  REM  CALCULATIONS/OUTPUT
  109. 1302  IF   NOT I  THEN I = 1:J = LFE
  110. 1304  IF J >LFE  THEN J = LFE
  111. 1306  FOR K = I TO J
  112. 1308 DEP = (BKVLUE -SALVAGE)/LFE:TDEP = K *DEP:RDV = (LFE -K) *DEP:RBV = RDV +SALVAGE
  113. 1310  PRINT  SPC( 1 -(K >9));K; TAB( 4);:PL = 7:P = DEP: GOSUB 300: PRINT P$;:PL = 10:P = RDV: GOSUB 300: PRINT P$;:P = RBV: GOSUB 300: PRINT P$;:P = TDEP: GOSUB 300: PRINT P$;: REM  
  114. 1312  NEXT K
  115. 1314 :
  116. 1400  REM  PROGRAM ENDING
  117. 1402  PRINT : VTAB 24: POKE 34,0
  118. 1404  PRINT "ANOTHER RUN? ";: POKE  -16368,0: GET ANS$: PRINT ANS$: IF  LEFT$(ANS$,1) = "Y"  THEN  HOME : VTAB 12: GOTO 1102
  119. 1406  GOTO 200: REM  RETURN TO MENU
  120. 1408 :
  121. 2000  REM  VARIABLE RATE - DECLINING BALANCE DEPRECIATION
  122. 2002 :
  123. 2004  REM  PROGRAM INSTRUCTIONS
  124. 2006  CLEAR :DP = 0:G$ =  CHR$(7): HOME : VTAB 10
  125. 2008  PRINT "INSTRUCTIONS? ";: POKE  -16368,0: GET ANS$: IF  LEFT$(ANS$,1) < >"Y"  THEN  HOME : VTAB 10: GOTO 2102
  126. 2010  HOME : VTAB 2: PRINT  TAB( 4)"VARIABLE RATE - DECLINING BALANCE": PRINT  TAB( 10)"DEPRECIATION SCHEDULE": GOSUB 400
  127. 2012  PRINT "THIS METHOD PROVIDES FOR MORE DEPRECIA-": PRINT "TION IN EARLIER YEARS AND DECREASING": PRINT "DEPRECIATION IN LATER YEARS."
  128. 2014  PRINT "THE VARIABLE RATE IS A FACTOR (E.G. 1.5": PRINT "OR 1.25) THAT'S THE SAME AS A DECLINING BALANCE PERCENTAGE."
  129. 2016  PRINT 
  130. 2018  PRINT "THIS SCHEDULE WILL ALSO GIVE THE CROSS-": PRINT "OVER POINT (HI-LIGHTED), WHERE THE": PRINT "SWITCH FROM THIS METHOD TO THE STRAIGHT"
  131. 2020  PRINT "LINE METHOD SHOULD BE MADE.  AT THIS": PRINT "POINT, STRAIGHT LINE DEPRECIATION IS"
  132. 2022  PRINT "GREATER THAN THAT BY THE DECLINING": PRINT "BALANCE METHOD."
  133. 2024  PRINT 
  134. 2026 :
  135. 2100  REM  INPUT STARTING,SALVAGE,LIFE,FACT
  136. 2102  PRINT "1. STARTING BOOK VALUE ";: IF FLAG  THEN  PRINT A(1): GOTO 2106
  137. 2104  INPUT A(1)
  138. 2106  PRINT "2. SALVAGE VALUE"; TAB( 24);: IF FLAG  THEN  PRINT A(2): GOTO 2110
  139. 2108  INPUT A(2)
  140. 2110  PRINT "3. LIFE EXPECTANCY"; TAB( 24);: IF FLAG  THEN  PRINT A(3): GOTO 2114
  141. 2112  INPUT A(3)
  142. 2114  PRINT "4. RATE FACTOR"; TAB( 24);: IF FLAG  THEN  PRINT A(4): GOTO 2118
  143. 2116  INPUT A(4):FLAG = 1
  144. 2118  PRINT : PRINT "ANY CHANGES? ";: POKE  -16368,0: GET ANS$: PRINT ANS$: IF  LEFT$(ANS$,1) = "N"  THEN 2122
  145. 2120  PRINT : INPUT "WHICH ONE? ";W: PRINT "CHANGE PART ";W;" TO: ";: INPUT A(W): HOME : VTAB 10: GOTO 2102
  146. 2122 BKVLUE = A(1):SALVAGE = A(2):LFE = A(3):FACT = A(4)
  147. 2124  PRINT : PRINT "DISPLAY ENTIRE SCHEDULE?";: POKE  -16368,0: GET ANS$: PRINT ANS$
  148. 2126  IF  LEFT$(ANS$,1) = "Y"  THEN I = 0: GOTO 2202
  149. 2128  PRINT "WHICH YEARS (START,END)";: INPUT I,J
  150. 2130 :
  151. 2200  REM  OUTPUT HEADING
  152. 2202  HOME : PRINT  TAB( 5);"DEPR"; TAB( 14);"REMAIN"; TAB( 25);"REMAIN"; TAB( 35);"TOTAL"
  153. 2204  PRINT "YR"; TAB( 4);"AMOUNT"; TAB( 12);"DEPR VALUE"; TAB( 23);"BOOK VALUE"; TAB( 35);"DEPREC"
  154. 2206  GOSUB 400: POKE 34,3
  155. 2208 :
  156. 2300  REM  CALCULATION/OUTPUT
  157. 2302  IF   NOT I  THEN I = 1:J = LFE
  158. 2304  IF J >LFE  THEN J = LFE
  159. 2306  FOR K = 1 TO J
  160. 2308 DEP = (1 -FACT/LFE) ^(K -1) *(FACT/LFE) *BKVLUE:TDEP = (1 -((1 -FACT/LFE) ^(K))) *BKVLUE
  161. 2310 RDV = BKVLUE -SALVAGE -TDEP:RBV = RDV +SALVAGE
  162. 2312  IF (LFE -K) *DEP <RDV  THEN  INVERSE 
  163. 2314  PRINT  SPC( 1 -(K >9));K; TAB( 4);:PL = 7:P = DEP: GOSUB 300: PRINT P$;:PL = 10:P = RDV: GOSUB 300: PRINT P$;:P = RBV: GOSUB 300: PRINT P$;:P = TDEP: GOSUB 300: PRINT P$;: REM 
  164. 2316  NEXT K: NORMAL 
  165. 2318 :
  166. 2400  REM  PROGRAM ENDING
  167. 2402  PRINT : VTAB 24: POKE 34,0
  168. 2404  PRINT "ANOTHER RUN? ";: POKE  -16368,0: GET ANS$: PRINT ANS$: IF  LEFT$(ANS$,1) = "Y"  THEN  HOME : VTAB 12: GOTO 2102
  169. 2406  GOTO 200: REM  RETURN TO MENU
  170. 2408 :
  171. 3000  REM  ACCRUED INTEREST
  172. 3002  CLEAR :DP = 2:G$ =  CHR$(7)
  173. 3004  HOME : VTAB 5: PRINT "ENTER A ZERO FOR ITEM TO CALCULATE:": PRINT 
  174. 3006  PRINT "1. BEGINNING AMOUNT"; TAB( 28);: IF FLAG  THEN  PRINT A(1): GOTO 3010
  175. 3008  INPUT A(1)
  176. 3010  PRINT "2. ANNUAL INTEREST RATE %"; TAB( 28);: IF FLAG  THEN  PRINT A(2): GOTO 3014
  177. 3012  INPUT A(2)
  178. 3014  PRINT "3. FUTURE AMOUNT"; TAB( 28);: IF FLAG  THEN  PRINT A(3): GOTO 3022
  179. 3016  INPUT A(3)
  180. 3018 FLAG = 0: VTAB 10: CALL  -958: PRINT : PRINT "DO YOU WISH TO CALCULATE THE NUMBER": INPUT "OF DAYS BETWEEN TWO DATES? ";ANS$
  181. 3020  IF  LEFT$(ANS$,1) = "Y"  THEN FLAG = 1: GOSUB 600: GOTO 3004
  182. 3022  VTAB 10: CALL  -958: PRINT "4. NUMBER OF DAYS"; TAB( 28);: IF FLAG  THEN  PRINT A(4): GOTO 3026
  183. 3024  INPUT A(4):FLAG = 1
  184. 3026  VTAB 15: INVERSE : PRINT " TYPE 'END' TO RETURN TO MENU ": NORMAL : PRINT : INPUT "ANY CHANGES? ";ANS$
  185. 3028  IF  LEFT$(ANS$,1) = "N"  THEN 3102
  186. 3030  IF  LEFT$(ANS$,1) = "E"  THEN 200
  187. 3032  INPUT "WHICH PART? ";W: IF W = 4  THEN 3018
  188. 3034  PRINT "CHANGE PART ";W;" TO: ";: INPUT A(W): GOTO 3004
  189. 3036 :
  190. 3100  REM  CALCULATION SECTION
  191. 3102  IF A(1) = 0  THEN A(1) = A(3)/(1 +(A(2)/36500 *A(4))):A(1) =  INT(A(1) *100 +.5)/100
  192. 3104  IF A(2) = 0  THEN A(2) = (A(3) -A(1)) *36500/(A(1) *A(4)):A(2) =  INT(A(2) *100 +.5)/100
  193. 3106  IF A(3) = 0  THEN A(3) = A(2)/36500 *A(1) *A(4):A(3) =  INT((A(1) +A(3)) *100 +.5)/100
  194. 3108  IF A(4) = 0  THEN A(4) = (A(3) -A(1))/(A(1) *A(2)/36500):A(4) =  INT(A(4) +.5)
  195. 3110  GOTO 3004
  196. 3112 :
  197. 4000  REM  COMPOUND INTEREST SECTION
  198. 4002  CLEAR :G$ =  CHR$(7)
  199. 4004  HOME : VTAB 5: PRINT "1. AMOUNT TO BE COMPOUNDED"; TAB( 30);: IF FLAG  THEN  PRINT A(1): GOTO 4008
  200. 4006  INPUT A(1)
  201. 4008  PRINT "2. YRLY INTEREST RATE (MAX)"; TAB( 30);: IF FLAG  THEN  PRINT A(2): GOTO 4012
  202. 4010  INPUT A(2)
  203. 4012  PRINT "3. CHANGE IN INTEREST RATE"; TAB( 30);: IF FLAG  THEN  PRINT A(3): GOTO 4020
  204. 4014  INPUT A(3)
  205. 4016 FLAG = 0: VTAB 8: CALL  -958: PRINT : PRINT "DO YOU WISH TO CALCULATE THE NUMBER": INPUT "OF DAYS BETWEEN TWO DATES? ";ANS$
  206. 4018  IF  LEFT$(ANS$,1) = "Y"  THEN FLAG = 1: GOSUB 600: GOTO 4004
  207. 4020  VTAB 8: CALL  -958: PRINT "4. NUMBER OF DAYS"; TAB( 30);: IF FLAG  THEN  PRINT A(4): GOTO 4024
  208. 4022  INPUT A(4):FLAG = 1
  209. 4024  VTAB 15: INVERSE : PRINT " TYPE 'END' TO RETURN TO MENU ": NORMAL : PRINT : INPUT "ANY CHANGES? ";ANS$
  210. 4026  IF  LEFT$(ANS$,1) = "N"  THEN 4034
  211. 4028  IF  LEFT$(ANS$,1) = "E"  THEN 200
  212. 4030  INPUT "WHICH PART? ";W: IF W = 4  THEN 4016
  213. 4032  PRINT "CHANGE PART ";W;" TO: ";: INPUT A(W): GOTO 4004
  214. 4034 AMT = A(1):IR = A(2):IC = A(3):DAYS = A(4)
  215. 4036 CP(1) = 360:CP(2) = 365:CP(3) = 12:CP(4) = 4
  216. 4038 :
  217. 4100  REM  OUTPUT HEADINGS
  218. 4102  HOME : VTAB 2: INVERSE : PRINT " COMPOUNDING $";AMT;" FOR ";DAYS;" DAYS. ": NORMAL : PRINT 
  219. 4104  PRINT "PCNT"; TAB( 7);"360 DAY"; TAB( 16);"365 DAY"; TAB( 26);"MONTH"; TAB( 34);"QUARTER";
  220. 4106  GOSUB 400: PRINT 
  221. 4108 :
  222. 4200  REM  CALCULATIONS/OUTPUT
  223. 4202 PL = 4:DP = 0:P = IR *100: GOSUB 300: PRINT P$;
  224. 4204  FOR X = 1 TO 4
  225. 4206 I = IR/(CP(X) *100)
  226. 4208 TIME =  INT(DAYS/ INT(365/CP(X)))
  227. 4210 FUTAMT = AMT *(1 +I) ^TIME
  228. 4212 PL = 9:DP = 2:P = FUTAMT
  229. 4214  GOSUB 300: PRINT P$;
  230. 4216  NEXT X
  231. 4218 :
  232. 4220  REM  TEST FOR PROGRAM END
  233. 4222 IR = IR -IC: IF  PEEK(37) <21  AND IR >0  THEN 4202
  234. 4224  VTAB 24: HTAB 26: PRINT "PRESS ANY KEY ";: CALL  -756: GOTO 4004
  235. 4226 :
  236. 5000  REM  UNEARNED INTEREST REBATE (RULE OF 78'S)
  237. 5002  CLEAR :DP = 2:G$ =  CHR$(7)
  238. 5004  HOME : VTAB 5: PRINT "1. TOTAL NUMBER OF PAYMENTS"; TAB( 30);: IF FLAG  THEN  PRINT A(1): GOTO 5008
  239. 5006 VT = 5:HT = 30:LS = 2: VTAB VT: HTAB HT: CALL  -868: GOSUB 900:A(1) =  VAL(CS$): IF A(1) = 0  OR  STR$(A(1)) < >CS$  THEN  PRINT G$;: GOTO 5006
  240. 5008  PRINT "2. MONTHLY PAYMENT AMOUNT"; TAB( 30);: IF FLAG  THEN  PRINT A(2): GOTO 5012
  241. 5010 VT = 6:HT = 30:LS = 6: VTAB VT: HTAB HT: CALL  -868: GOSUB 900:A(2) =  VAL(CS$): IF A(2) = 0  OR  STR$(A(2)) < >CS$  THEN  PRINT G$;: GOTO 5010
  242. 5012  PRINT "3. TOTAL FINANCE CHARGE"; TAB( 30);: IF FLAG  THEN  PRINT A(3): GOTO 5016
  243. 5014 VT = 7:HT = 30: VTAB VT: HTAB HT: CALL  -868: GOSUB 900:A(3) =  VAL(CS$): IF A(3) = 0  OR  STR$(A(3)) < >CS$  THEN  PRINT G$;: GOTO 5014
  244. 5016  PRINT "4. NUMBER OF PAYMENTS MADE"; TAB( 30);: IF FLAG  THEN  PRINT A(4): GOTO 5020
  245. 5018 VT = 8:HT = 30: VTAB VT: HTAB HT: CALL  -868:LS = 2: GOSUB 900:A(4) =  VAL(CS$):FLAG = 1: IF  STR$(A(4)) < >CS$  THEN  PRINT G$;: GOTO 5018
  246. 5020  VTAB 15: INVERSE : PRINT " TYPE 'END' TO RETURN TO MENU ": NORMAL 
  247. 5022  VTAB 17: HTAB 1: PRINT "ANY CHANGES?":VT = 17:HT = 14: VTAB VT: HTAB HT: CALL  -868:LS = 3: GOSUB 900: IF CS$ < >"Y"  AND CS$ < >"N"  AND  LEFT$(CS$,1) < >"E"  THEN  PRINT G$;: GOTO 5022
  248. 5024 CS$ =  LEFT$(CS$,1): IF CS$ = "E"  THEN 200
  249. 5026  IF CS$ = "N"  THEN 5034
  250. 5028  VTAB 18: HTAB 1: PRINT "WHICH ONE?":VT = 18:HT = 12: VTAB VT: HTAB HT: CALL  -868:LS = 1: GOSUB 900:W =  VAL(CS$): IF  STR$(W) < >CS$  OR W <1  OR W >4  THEN  PRINT G$;: GOTO 5028
  251. 5030  VTAB 19: HTAB 1: PRINT "CHANGE PART ";W;" TO:":VT = 19:HT = 19: VTAB VT: HTAB HT: CALL  -868:LS = 6 -4 *(W = 1  OR W = 4): GOSUB 900:A(W) =  VAL(CS$): IF  STR$(A(W)) < >CS$  THEN  PRINT G$;: GOTO 5030
  252. 5032  GOTO 5004
  253. 5034 NP = A(1):PMT = A(2):FC = A(3):NMADE = A(4)
  254. 5036 :
  255. 5100  REM  OUTPUT HEADING SECTION
  256. 5102  HOME : PRINT "PAYMENT"; TAB( 11);"REMAIN"; TAB( 22);"REBATE"; TAB( 33);"TOTAL"
  257. 5104  PRINT "NUMBER"; TAB( 11);"BALANCE"; TAB( 22);"AMOUNT"; TAB( 32);"INTEREST"
  258. 5106  GOSUB 400
  259. 5108 :
  260. 5200  REM  CALCULATION/OUTPUT
  261. 5202  FOR I = NMADE TO NP
  262. 5204 J = NP -I
  263. 5206 REBTE = ((J *FC) *(J +1))/(NP *(NP +1))
  264. 5208 BAL = (J *PMT) -REBTE
  265. 5210  PRINT  SPC( 3 -(I >9));I;:PL = 7:P = BAL: GOSUB 300: PRINT  TAB( 10);P$;:P = REBTE: GOSUB 300: PRINT  TAB( 21);P$;:P = FC -REBTE: GOSUB 300: PRINT  TAB( 32);P$
  266. 5212 :
  267. 5300  REM  PROGRAM ENDING
  268. 5302  IF  PEEK(37) <22  AND J >0  THEN  NEXT I
  269. 5304  VTAB 24: HTAB 26: PRINT "PRESS ANY KEY ";: CALL  -756: GOTO 5004
  270. 5306 :
  271. 8000  REM  DIRECT REDUCTION LOAN
  272. 8002 :
  273. 8004  REM  PGM INITIALIZATION
  274. 8006  CLEAR :DP = 2:G$ =  CHR$(7)
  275. 8007 :
  276. 8100  REM  MENU / INPUT SECTION
  277. 8102  HOME : VTAB 5
  278. 8104  PRINT "1. MAX BORROW AMOUNT"; TAB( 25);: IF FLAG  THEN  PRINT A(1): GOTO 8108
  279. 8106  INPUT A(1)
  280. 8108  PRINT "2. CHANGE IN AMOUNT"; TAB( 25);: IF FLAG  THEN  PRINT A(2): GOTO 8112
  281. 8110  INPUT A(2)
  282. 8112  PRINT "3. MAX INTEREST RATE"; TAB( 25);: IF FLAG  THEN  PRINT A(3): GOTO 8116
  283. 8114  INPUT A(3)
  284. 8116  PRINT "4. CHANGE IN INT RATE"; TAB( 25);: IF FLAG  THEN  PRINT A(4): GOTO 8120
  285. 8118  INPUT A(4)
  286. 8120  PRINT "5. LOAN TERM (MONTHS)"; TAB( 25);: IF FLAG  THEN  PRINT A(5): GOTO 8124
  287. 8122  INPUT A(5):FLAG = 1
  288. 8124  PRINT : INVERSE : PRINT "TYPE 'END' TO RETURN TO MENU ": NORMAL : VTAB 18: INPUT "ANY CHANGES? ";Y$
  289. 8126  IF  LEFT$(Y$,1) = "N"  THEN 8146
  290. 8128  IF Y$ = "END"  THEN 200
  291. 8130  INPUT "WHICH ONE? ";W: PRINT "CHANGE PART ";W;" TO ";: INPUT A(W): GOTO 8102
  292. 8132 :
  293. 8134  REM  PAYMENT CALCULATION
  294. 8136 I = J/1200
  295. 8138 PMT = (K *I)/(1 -(1 +I) ^( -A(5)))
  296. 8140  RETURN 
  297. 8142 :
  298. 8144  REM  OUTPUT HEADING SECTION
  299. 8146  HOME : HTAB 13: INVERSE : PRINT " TERM: ";A(5);" MONTHS ": NORMAL 
  300. 8148  VTAB 2: PRINT "PRCNT";
  301. 8150  FOR K = A(1) -4 *A(2) TO A(1)  STEP A(2):P$ =  STR$( INT(K)):PL = 7: GOSUB 308: PRINT P$;: NEXT K
  302. 8152  GOSUB 400
  303. 8154 :
  304. 8156  REM  MAIN PROGRAM
  305. 8158 J = A(3)
  306. 8160 P = J:PL = 5: GOSUB 302: PRINT P$;
  307. 8162  FOR K = A(1) -4 *A(2) TO A(1)  STEP A(2)
  308. 8164  GOSUB 8136
  309. 8166 P = PMT:PL = 7: GOSUB 302: PRINT P$;
  310. 8168  NEXT K
  311. 8170 J = J -A(4)
  312. 8172  IF  PEEK(37) <22  AND J >0  THEN 8160
  313. 8174  VTAB 24: INVERSE : PRINT " ANY KEY FOR MENU ";: NORMAL 
  314. 8176  CALL  -756
  315. 8178  GOTO 8102
  316. 8180 :
  317. 9000  REM  AMORTIZATION SCHEDULE
  318. 9001  HOME : VTAB 5: INPUT "YEARLY INTEREST RATE % ";I:I = I/1200: INPUT "MONTHLY PAYMENT ";PMT: INPUT "INITIAL LOAN AMOUNT ";PV
  319. 9002  HOME :DP = 2:G$ =  CHR$(7)
  320. 9003  PRINT  TAB( 5);"PAID TO"; TAB( 15);"PAID"; TAB( 22);"REMAIN"; TAB( 33);"TOTAL"
  321. 9004  PRINT "NO"; TAB( 5);"PRINCIP"; TAB( 14);"TO INT"; TAB( 22);"BALANCE"; TAB( 32);"INTEREST": FOR DOT = 0 TO 39: PRINT ".";: NEXT DOT: POKE 34,3
  322. 9005 OB = PV:K = 1
  323. 9006 A = (1 +I) ^( -K)
  324. 9007 NB = (((A -1)/I) *PMT +PV)/A
  325. 9008  IF NB < = 0  THEN 9014
  326. 9009 PRIN = OB -NB:K$ =  STR$(K):K$ = K$ +"  ": PRINT  LEFT$(K$,3);:P = PRIN:PL = 7: GOSUB 300: PRINT P$;
  327. 9010 IN = PMT -PRIN:P = IN:PL = 9: GOSUB 300: PRINT P$;:P = NB:PL = 10: GOSUB 300: PRINT P$;
  328. 9011 TIN = K *PMT -PV +NB:P = TIN: GOSUB 300: PRINT P$
  329. 9012 K = K +1:OB = NB
  330. 9013  IF  PEEK(37) < >23  THEN 9006
  331. 9014  VTAB 24: INVERSE : PRINT " ESC TO EXIT OR ANY KEY TO CONTINUE ";: NORMAL 
  332. 9015  POKE  -16368,0: GET Z$: IF Z$ < > CHR$(27)  THEN  HOME : GOTO 9006
  333. 9016  POKE 34,0: GOTO 200